/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package be.hogent.iii.project.gui;

import be.hogent.iii.project.common.game.objecten.Spel;
import be.hogent.iii.project.objects.Coordinaat;
import be.hogent.iii.project.objects.Entiteit;
import be.hogent.iii.project.objects.Veld;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.List;
import java.util.Properties;
import javax.swing.JPanel;

/**
 * Het paneel dat het speelveld bevat, bestaat uit een tweedimensionale tabel
 * van vakjes. Geeft een spel mee. 
 * @author Caribou
 */
public class SpelbordPaneel extends JPanel{
    
    private static final long serialVersionUID = 1L;
    
    //private int aantalVakjesHoogte = 30;
    //private int aantalVakjesBreedte = 30;
    private VakjeButton[][] speelbordGUI;
    private BottomPaneel bp;
    private Veld veld;
    private Spel spel;
    private Properties props;
    private VakjeButton geselecteerd;
    private PaneelEventHandler handler;
    
    /**
     * Basis constructor
     * @param bp Het onderste paneel van het spel, dat hier gebruikt wordt. 
     * @param spel Het spel dat moet weergegeven worden. 
     */
    public SpelbordPaneel(BottomPaneel bp, Spel spel, Veld veld, Properties props, PaneelEventHandler handler){
        super();
        
        this.spel = spel;
        this.veld = veld;
        this.bp = bp;
        this.props = props;
        this.handler = handler;
        handler.setSpelpaneel(this);
        
        Dimension grootte = new Dimension(VakjeButton.getBreedte()*veld.getGrootteX(), VakjeButton.getHoogte()*veld.getGrootteY());
        this.setSize(grootte);
        this.setMinimumSize(grootte);
        this.setPreferredSize(grootte);
        this.setMaximumSize(grootte);
        
        refresh();
    } 
    
    public void refresh(){
        this.removeAll();
        //vul de vakjes op
        this.setLayout(new GridLayout(veld.getGrootteY(),veld.getGrootteX()));
        speelbordGUI = new VakjeButton[veld.getGrootteX()][veld.getGrootteY()];
        for(int j = 0; j < veld.getGrootteY(); j++){
            for(int i = 0; i < veld.getGrootteX(); i++){
                speelbordGUI[i][j]=new VakjeButton(veld.getVakje(i,j),i,j, bp,handler, props);
                this.add(speelbordGUI[i][j]);
            }
        }
        
        //plaats de objecten
        List<Entiteit> entiteiten = veld.getEntiteiten();
        for(int i = 0; i < entiteiten.size(); i++){
            getVakje(entiteiten.get(i).getPlaats()).zetEntiteit(props, entiteiten.get(i));
        }
        this.revalidate();
        geselecteerd = null;
    }
    
    /**
     * Geef een vakjeButton op plaats c terug. 
     * @param c De coordinaten van het weer te geven vakjeButton
     * @return VakjeButton
     */
    public VakjeButton getVakje(Coordinaat c){
        return speelbordGUI[c.getX()][c.getY()];
    }
    
    

    /**
     * Geef het geselecteerde vakje. 
     * @return geselecteerde vakje of null
     */
    public VakjeButton getGeselecteerd() {
        return geselecteerd;
    }

    /**
     * Zet een vakje als geselecteerd. 
     * @param geselecteerd selecteer dit vakje. 
     */
    public void selecteer(VakjeButton geselecteerd) {
        geselecteerd.Selecteer();
        this.geselecteerd = geselecteerd;
    }
    
    /**
     * Deselecteer een vakje. 
     * @param geselecteerd
     */
    public void deselecteer(VakjeButton geselecteerd) {
        geselecteerd.deSelecteer();
        geselecteerd = null;
    }
    
}
